/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package blancanieves.back;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author pabloramix
 */
public class Blancanieves extends Personaje {

    private static final String NOMBRE_BLANCANIEVES = "Blancanieves";
    private static final String FOTO_BLANCANIEVES = "/blancanieves/imagenes/blancanieves.png";
    private int prioridadCocinar;
    private int prioridadPasear;

    public enum Estado { PARADA, PASEANDO, COCINANDO, SIRVIENDO }
    
    private Estado estado;
    
    public Blancanieves() {
        super(NOMBRE_BLANCANIEVES, FOTO_BLANCANIEVES);
        estado = Estado.PARADA;
        prioridadCocinar = 40;
        prioridadPasear = 40;
    }

    public Blancanieves(int prioridadCocinar, int prioridadPasear) {
        super(NOMBRE_BLANCANIEVES, FOTO_BLANCANIEVES);
        estado = Estado.PARADA;
        this.prioridadCocinar = prioridadCocinar;
        this.prioridadPasear = prioridadPasear;
    }

    public void cocinar() throws InterruptedException {

        estado = Estado.COCINANDO;
        setProgreso(0);
        
        for (int i = 0; i < 100; i++) {

            System.out.println(this + " Con las manos en la masa, migas en la cocina ...");
            setProgreso(i);
            Thread.sleep(obtenerPrioridadReal(prioridadCocinar));
        }
    }

    public void pasear() throws InterruptedException {

        estado = Estado.PASEANDO;
        setProgreso(0);
        
        for (int i = 0; i < 100; i++) {

            System.out.println(this + " Eres tú, mi principe azul ... la la la la");
            setProgreso(i);
            Thread.sleep(obtenerPrioridadReal(prioridadPasear));

        }
    }

    @Override
    public void run() {

        flag = true;
        Comedor c = Comedor.getInstance();

        while (flag) {
            try {

                if (c.hayAlguienParaComer()) {
                    
                    System.out.println(this + " Parece que ya han llegado ...");
                    cocinar();
                    Thread.sleep(obtenerPrioridadReal(prioridadCocinar));

                    estado = Estado.SIRVIENDO;
                    setProgreso(0);
                    
                    for (Sitio s : c.getMesa()) {
                        if (s != null) {
                            s.servir();
                        }
                    }
                } else {

                    System.out.println(this + " No hay nadie para comer, me voy a dar un paseo ...");
                    pasear();
                    Thread.sleep(obtenerPrioridadReal(prioridadPasear));

                }
            } catch (InterruptedException ex) {
                Logger.getLogger(Blancanieves.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        System.out.println(this + " Terminando.");
        estado = null;
    }
    
    public Estado getEstado() {
        return estado;
    }
    
    public String toString() {
        return super.toString() + " [" + ((estado == null) ? "Parada" : estado.toString()) + "]  (cocinar:" + obtenerPrioridadReal(prioridadCocinar) + "/pasear:" + obtenerPrioridadReal(prioridadPasear) + ") ";
    }
    
    @Override
    public void terminate() {
        super.terminate();
        estado = Estado.PARADA;
    }

    public int getPrioridadCocinar() {
        return prioridadCocinar;
    }

    public void setPrioridadCocinar(int prioridadCocinar) {
        this.prioridadCocinar = formatearPrioridad(prioridadCocinar);
    }

    public int getPrioridadPasear() {
        return prioridadPasear;
    }

    public void setPrioridadPasear(int prioridadPasear) {
        this.prioridadPasear = formatearPrioridad(prioridadPasear);
    }
    
    public String getPuntosCocinar() {
        return prioridadCocinar + "/100";
    }
    
    public String getPuntosPasear() {
        return prioridadPasear + "/100";
    }
}
